package br.com.conciliador.cadastro.vo;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Formula;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Proxy;
import org.hibernate.annotations.Type;

import br.com.conciliador.cadastro.vo.filtro.FiltroContaBancoVo;
import br.com.conciliador.consulta.vo.ExtratoVo;
import br.com.r2.util.tipodado.InteiroLongo;
import br.com.r2.util.tipodado.Moeda;
import br.com.r2.util.tipodado.Texto;

@Entity
@Table(name = "DIM_CONTABANCO")
@Proxy(lazy = true)
public class ContaBancoVo implements Serializable
{

   /**
    * 
    */
   private static final long serialVersionUID = -6337662436999325603L;

   @Id
   @Column(name = "ID")
   @GeneratedValue(generator = "InteiroSequenceGenerator")
   @GenericGenerator(name = "InteiroSequenceGenerator", strategy = "br.com.r2.util.tipodado.hibernate.generator.InteiroSequenceGenerator")
   @Type(type = "br.com.r2.util.tipodado.hibernate.InteiroLongoUT")
   private InteiroLongo codigo;

   @Column(name = "DESCRICAO")
   @Type(type = "br.com.r2.util.tipodado.hibernate.TextoUT")
   private Texto descricao;

   @OneToMany(mappedBy = "extratoPK.conta", fetch = FetchType.LAZY)
   @Cascade(CascadeType.ALL)
   private List<ExtratoVo> listaLancamentos;

   @Formula("BANCO || '/' || AGENCIA || '/' || CONTA")
   @Type(type = "br.com.r2.util.tipodado.hibernate.TextoUT")
   private Texto bancoAgenciaConta;

   @Transient
   private Moeda creditos;
   
   @Transient
   private Moeda debitos;
   
   @Transient
   private Moeda saldo;
   
   @Transient
   private FiltroContaBancoVo filtro;

   public InteiroLongo getCodigo()
   {
      return codigo;
   }

   public void setCodigo(InteiroLongo codigo)
   {
      this.codigo = codigo;
   }

   public Texto getDescricao()
   {
      return descricao;
   }

   public void setDescricao(Texto descricao)
   {
      this.descricao = descricao;
   }

   public List<ExtratoVo> getListaLancamentos()
   {
      return listaLancamentos;
   }

   public void setListaLancamentos(List<ExtratoVo> listaLancamentos)
   {
      this.listaLancamentos = listaLancamentos;
   }

   public FiltroContaBancoVo getFiltro()
   {
      return filtro;
   }

   public void setFiltro(FiltroContaBancoVo filtro)
   {
      this.filtro = filtro;
   }

	public Moeda getCreditos() {
		return creditos;
	}

	public void setCreditos(Moeda creditos) {
		this.creditos = creditos;
	}

	public Moeda getDebitos() {
		return debitos;
	}

	public void setDebitos(Moeda debitos) {
		this.debitos = debitos;
	}

	public Moeda getSaldo() {
		return saldo;
	}

	public void setSaldo(Moeda saldo) {
		this.saldo = saldo;
	}

	public Texto getBancoAgenciaConta() {
		return bancoAgenciaConta;
	}

	public void setBancoAgenciaConta(Texto bancoAgenciaConta) {
		this.bancoAgenciaConta = bancoAgenciaConta;
	}
}
